; division routine
; 1. calculate flag if result is negate and convert operands to positiv
; 2. second "divide" with unsigned suczessive Approximation  
; 3. fix the sign of result 

 .MACRO INTdivide_mac
 
  STR %2,\arg2save
  STR %3,\arg3save
  STR stackregister,\stackregistersave
  STR R14,\R14save

  MOV tempregister,#0
  CMP %2,#0
   RSBLT %2,%2,#0
   SUBLT tempregister,tempregister,#1
  CMP %3,#0
   RSBLT %3,%3,#0
   MVNLT tempregister,tempregister
  STR tempregister,\sign 
 
  MOV  R14,#32.
  MOV  stackregister,#0
\loop   
  ADDS %2,%2,%2
  ADCS stackregister,stackregister,stackregister
  CMP  stackregister,%3
  SUBGE  stackregister,stackregister,%3
  ADDGE  %2,%2,#1         
  SUBS  R14,R14,#1
  GOcond NE,\loop        
     
  LDR tempregister,\sign 
  CMP tempregister,#0
  RSBNE %2,%2,#0 
  LDR R14,\R14save
  MOV tempregister,%2
  LDR %2,\arg2save
  LDR %3,\arg3save
  LDR stackregister,\stackregistersave
  MOV %1,tempregister  

  GO \hupf
\arg2save .WORD 0
\arg3save .WORD 0
\stackregistersave  .WORD 0
\R14save  .WORD 0
\sign     .WORD 0
\hupf

 .ENDM 
       
